#include "creatMap.h"
#include "config.h"

// 用于随机打乱方向的函数
void shuffle(int dirs[4][2]) {
    for (int i = 0; i < 4; i++) {
        int r = rand() % 4;
        // 交换 dirs[i] 和 dirs[r]
        int tempX = dirs[i][0];
        int tempY = dirs[i][1];
        dirs[i][0] = dirs[r][0];
        dirs[i][1] = dirs[r][1];
        dirs[r][0] = tempX;
        dirs[r][1] = tempY;
    }
}

// DFS 挖墙函数
void carveMaze(int x, int y) {
    // 定义上下左右四个方向
    int dirs[4][2] = {
        {0, 1},   // 右
        {0, -1},  // 左
        {1, 0},   // 下
        {-1, 0}   // 上
    };

    // 随机打乱方向，保证每次走的顺序不同
    shuffle(dirs);

    // 尝试向四个方向挖掘
    for (int i = 0; i < 4; i++) {
        int dx = dirs[i][0];
        int dy = dirs[i][1];

        // 目标格子（间隔两格挖，防止立即撞到已访问区域）
        int nx = x + dx * 2;
        int ny = y + dy * 2;

        // 判断目标格子是否在范围内，且还未被挖通(1 表示墙)
        if (nx > 0 && nx < MAZESIZE - 1 &&
            ny > 0 && ny < MAZESIZE - 1 &&
            maze[nx][ny] == 1) {

            // 把中间的墙挖通
            maze[x + dx][y + dy] = 0;
            // 把目标格子挖通
            maze[nx][ny] = 0;

            // 递归继续从目标格子向前挖
            carveMaze(nx, ny);
        }
    }
}